home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Libraries / 3DGPL 1.0 / CODE / HARDWARE / NEXTSTEP / HARDWARE.M < prev   
Encoding:
Text File  |  1995-06-22  |  4.9 KB  |  139 lines  |  [TEXT/MACA]

  1. /** 3DGPL *************************************************\
  2.  *  (NeXTStep, 8bit deep bitmaps, 32bit mashine)          *
  3.  *  Header for hardware specific stuff.                   *
  4.  *                                                        *
  5.  *  Defines:                                              *
  6.  *    HW_open_screen         opening output surface;      *
  7.  *    HW_blit                colourmap onto the screen;   *
  8.  *    HW_close_screen        closing output;              *
  9.  *                                                        *
  10.  *    HW_run_event_loop      runiing for events;          *
  11.  *    HW_quit_event_loop     quiting running.             *
  12.  *                                                        *
  13.  *  (6/1995) By Sergei Savhenko. (savs@cs.mcgill.ca).     *
  14.  *  Copyright (c) 1995 Sergei Savchenko.                  *
  15.  *  THIS SOURCE CODE CAN'T BE USED FOR COMERCIAL PURPOSES *
  16.  *  WITHOUT AUTHORISATION                                 *
  17. \**********************************************************/
  18.  
  19. #import  <appkit/appkit.h>                  /* id type */
  20. #import  <dpsclient/wraps.h>                /* DPS functions */
  21. #import  <dpsclient/event.h>                /* Event mascks */
  22. #include "../hardware/hardware.h"           /* harware dependent stuff */
  23.  
  24. id HW_window;                               /* application's main window */
  25. id HW_view;                                 /* the "view" of the window */
  26. NXRect HW_rect;                             /* screen boundaries */
  27. DPSTimedEntry HW_entry;                     /* initialized timed entry */
  28.  
  29. unsigned char *HW_colourmap;                /* where drwaings go to */
  30.  
  31. void (*HW_application_main)(void);
  32. void (*HW_application_key_handler)(int key_code);
  33.  
  34. /**********************************************************\
  35.  *  Implementations for fast memory operations.           *
  36. \**********************************************************/
  37.                   
  38. void HW_set_int(int *d,long l,int v) {long i; for(i=0;i<l;i++) *d++=v; }
  39.  
  40. /**********************************************************\
  41.  * Creating a window.                                     *
  42.  * RETURNS:  0 on display opening error;                  *
  43.  * --------  1 on success.                                *
  44. \**********************************************************/
  45.  
  46. int HW_open_screen(char *display_name,char *screen_name,
  47.            struct HW_colour palette[256],unsigned char *colourmap
  48.           )
  49. {
  50.  [Application new];
  51.  
  52.  HW_colourmap=colourmap;
  53.  
  54.  NXSetRect(&HW_rect,360.0,300.0,HW_SCREEN_X_SIZE,HW_SCREEN_Y_SIZE);
  55.  HW_window = [[Window alloc] initContent:&HW_rect
  56.                    style:NX_TITLEDSTYLE
  57.                  backing:NX_BUFFERED
  58.                   buttonMask:NX_MINIATURIZEBUTTONMASK
  59.                    defer:NO];
  60.  
  61.  [HW_window setTitle:screen_name];
  62.  [HW_window display];
  63.  [HW_window orderFront:nil];
  64.  
  65.  HW_view=[HW_window contentView];            /* window's main view */
  66.  NXSetRect(&HW_rect,0.0,0.0,HW_SCREEN_X_SIZE,HW_SCREEN_Y_SIZE);
  67.  [HW_view allocateGState];
  68. }
  69.  
  70. /**********************************************************\
  71.  * blitting a bitmap into the allocated window.           *
  72. \**********************************************************/
  73.  
  74. void HW_blit(void)
  75. {
  76.  [HW_view lockFocus];                       /* lock output on the view */
  77.  
  78.  NXImageBitmap(&HW_rect,HW_SCREEN_X_SIZE,HW_SCREEN_Y_SIZE,8,1,NX_MESHED,
  79.            NX_MONOTONICMASK,HW_colourmap,NULL,NULL,NULL,NULL
  80.           );
  81.  
  82.  [HW_window flushWindow];                   /* image appears on screen */
  83.  [HW_view unlockFocus];                     /* unlock output */
  84. }
  85.  
  86. /**********************************************************\
  87.  * Deallocating a window.                                 *
  88. \**********************************************************/
  89.  
  90. void HW_close_screen(void)
  91. {
  92. }
  93.  
  94. /**********************************************************\
  95.  * The main event loop.                                   *
  96. \**********************************************************/
  97.  
  98. void HW_event_loop()
  99. {
  100.  NXEvent *anEvent;
  101.  
  102.  HW_application_main();
  103.  
  104.  while((anEvent=[NXApp getNextEvent:NX_KEYDOWNMASK   
  105.              waitFor:0.0
  106.                threshold:NX_BASETHRESHOLD])!=NULL)
  107.   HW_application_key_handler(anEvent->data.key.charCode);
  108. }
  109.  
  110. /**********************************************************\
  111.  * running the event loop.                                *
  112. \**********************************************************/
  113.  
  114. void HW_run_event_loop(void (*application_main)(void),
  115.                void (*application_key_handler)(int key_code)
  116.               )
  117. {
  118.  [HW_window makeKeyWindow];
  119.  
  120.  HW_application_main=application_main;
  121.  HW_application_key_handler=application_key_handler;
  122.  HW_entry=DPSAddTimedEntry(0.0,&HW_event_loop,NULL,NX_BASETHRESHOLD);
  123.  
  124.  [NXApp run];
  125.  [NXApp free];
  126. }
  127.  
  128. /**********************************************************\
  129.  *  quiting the event loop.                               *
  130. \**********************************************************/
  131.  
  132. void HW_quit_event_loop(void)
  133. {
  134.  DPSRemoveTimedEntry(HW_entry);
  135.  [NXApp terminate:0];   
  136. }
  137.  
  138. /**********************************************************/
  139.